【实用篇】Nginx的配置文件以及案例详细配置实现 您所在的位置:网站首页 Nginx 配置详解 | 菜鸟教程 【实用篇】Nginx的配置文件以及案例详细配置实现

【实用篇】Nginx的配置文件以及案例详细配置实现

2024-07-11 16:56| 来源: 网络整理| 查看: 265

【实用篇】Nginx的配置文件以及案例配置实现 一、nginx 的配置文件二、配置实例-反向代理反向代理实例 1反向代理实例 2补充:关于 location 指令的说明 三、配置实例-负载均衡补充:nginx 分配服务器策略1、轮询(默认)2、weight 权重3、ip_hash4、fair(第三方) 四、配置实例-动静分离五、配置 Nginx 高可用

一、nginx 的配置文件

nginx 的配置文件 nginx.conf 文件可以分为以下三部分:

全局快

从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配 置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数, 进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。全局快比如上图中的 worker_processes 1 是 Nginx 服务器并发处理服务的关键配置, worker_processes 值越大,可以支持的并发处理量越多,但是会受到硬件、软件设备的制约。

event 块

event 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对 work process 下的网络进行序列化,是否允许同时接收多个网络,选取哪种驱动模型来处理连接请求,每个 work process 可以同时支持的最大连接数等。 event 块如上图中:worker_connections 1024:表示每个 work process 的最大连接数为 1024。

http块

这一部分是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。 http块又分为 http全局块 和 server 块。 http全局块 http全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。 server块

这块和虚拟主机有密切联系,虚拟主机从用户角度看,和一台独立的硬件主机是一样。而 http块可以有多个 server块,每一个 server块就相当于一个虚拟主机。每一个 server块 又可以分为 全局server块 以及多个 location块。

全局 server 块 最常见的配置就是本虚拟机主机的监听配置和本虚拟机的名称或 IP 配置。

location 块 这块的主要作用就是基于 Nginx 服务器接收到的请求字符串(例如:server_name/uri-string),对虚拟机主机名称(也可以是IP别名)之外的字符串(如前面的:/uri-string)进行匹配。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里执行。 http 块

二、配置实例-反向代理 反向代理实例 1

1、实现效果:使用 nginx 反向代理,访问 www.123.com 直接跳转到 127.0.0.1:8080(linux虚拟机中的 tommcat 主页)

2、配置实例准备:安装 JDK 1.8、Tommcat (1)JDK 的安装可以参考JDK 1.8 的安装方法 (2)安装 Tommcat

下载 Tommcat 的压缩包 下载地址Tommcat 压缩包下载地址参考 tommcat 压缩包下载

通过 Xftp 将该压缩包上传到 linux 系统下的 /usr/src/ 目录 上传压缩包

在 /usr/src/ 目录下将压缩包解压

cd /usr/src tar -vxf apache-tomcat-7.0.70.tar.gz

启动 Tommcat

# 切换到 Tommcat 目录下的 bin 目录 cd apache-tomcat-7.0.70/bin # 执行启动命令 ./startup.sh

启动 tommcat

开放8080端口(如果已经开放则不需要再次开放)

# 打开配置文件 vim /etc/sysconfig/iptables # 在配置文件中添加一下内容 -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT # 按 esc 退出编辑模式,输入以下命令保存即可 :wq # 重启防火墙服务 service iptables restart

开放8080端口

通过访问 ip + 8080端口号验证 tommcat 是否已经成功启动,看到如下页面即 tommcat 成功启动。 tommcat 主页

实现原理 反向代理实例的实现原理

(3)反向代理实例的配置

在本机 host 文件中配置 ip 地址所对应的域名

host 文件在 C:\Windows\System32\drivers\etc 目录下 host文件目录

使用编辑工具打开该 host 文件,并在该文件中加入以下内容 配置 ip地址与域名

修改 nginx 的配置文件。( /usr/lcoal/nginx/conf/ 目录下的 nginx.conf 文件) 修改配置文件

修改完后,按 ESC 退出编辑模式,再输入 :wq 保存退出。

在本地浏览器中地址栏输入 www.123.com 测试 nginx 反向代理是否成功,如果成功访问到 tomcat 的主页,说明配置成功。 测试反向代理实例1

反向代理实例 2

1、实现效果:使用nginx 反向代理, 根据访问的路径跳转到不同端口的服务中 nginx 监听端口为 9001。

访问 http://192.168.134.105:9001/edu/ 直接跳转到 127.0.0.1:8080 访问 http://192.168.134.105:9001/vod/ 直接跳转到 127.0.0.1:8081

2、配置实例准备: (1)准备两个 tomcat,一个端口 8080 端口,一个 8081 端口,配置各自的页面以及端口号。

创建 tomcat8080 和 tomcat8081 文件夹

# 切换到 /usr/src/ 目录下 cd /usr/src # 创建两个空文件夹 mkdir tomcat8080 mkdir tomcat8081

创建两个空文件夹

和配置反向代理实例 1 一样,将 tomcat 的压缩包分别上传到新创建的文件夹 tomcat8081 和 tomcat8082,并解压

# 将 tomcat8080 中的压缩包解压 cd tomcat8080/ tar -xvf apache-tomcat-7.0.70.tar.gz # 将 tomcat8081 中的压缩包解压 cd tomcat8081/ tar -xvf apache-tomcat-7.0.70.tar.gz

修改 tomcat8081 中的配置文件的端口

cd /usr/src/tomcat8081/apache-tomcat-7.0.70/conf vim server.xml

tomcat8081文件夹下的tomcat配置文件

两个 tomcat 都配置各自的页面,以便区分 8080端口的页面 8081端口的页面 然后使用 Xftp 分别上传到各自的文件夹中 上传8080端口的页面文件 上传8081端口的页面文件

开放 8080 端口和 8081 端口启动 两个 tomcat (开放端口,可参考反向代理配置实例 1或者以下开放 9001 端口),测试。 访问 8080 端口 tomcat 访问 8081 端口 tomcat 若访问页面如上,则说明两个 tomcat 配置成功。

(2)修改 nginx 的配置文件

在http 块中添加 server 块 加入如下内容

server { listen 9001; server_name 192.168.134.105; location ~/edu/ { proxy_pass http://127.0.0.1:8080; } location ~/vod/ { proxy_pass http://127.0.0.1:8081; } }

配置 nginx 配置文件

开放 9001 端口

# 打开配置文件 vim /etc/sysconfig/iptables # 在配置文件中添加一下内容 -A INPUT -m state --state NEW -m tcp -p tcp --dport 9001 -j ACCEPT # 按 esc 退出编辑模式,输入以下命令保存即可 :wq # 重启防火墙服务 service iptables restart

开放 9001 端口

测试 nginx 反向代理是否成功

注意!!!:在测试之前,需要切换到 /usr/local/nginx/sbin 目录下,通过指令 ./nginx -s reload 重启 nginx 服务。

在浏览器地址栏中,分别输入: http://192.168.134.105:9001/edu/a.html tomcat8080端口的nginx反向代理的结果

http://192.168.134.105:9001/vod/a.html tomcat8081端口的nginx反向代理的结果 出现以上结果说明 nginx 反向代理成功。

补充:关于 location 指令的说明

该指令用于匹配 URL 地址。语法如下:

location [ = | ~ | ~* | ^~ ] uri { }

1、= :用于不含正则表达式的 uri 前, 要求请求字符串与 uri 严格匹配,如果匹配 成功, 就停止继续向下搜索并立即处理该请求。 2、~: 用于表示 uri 包含正则表达式,并且区分大小写。 3、~*:用于表示 uri 包含正则表达式, 并且不区分大小写。 4、^~:用于不含正则表达式的 uri 前, 要求 Nginx 服务器找到标识 uri 和请求字 符串匹配度最高的 location 后,立即使用此 location 处理请求, 而不再使用 location 块中的正则 uri 和请求字符串做匹配。 注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~*标识。

三、配置实例-负载均衡

1、实现的效果:在浏览器地址栏中输入 http://192.168.134.105/edu/a.html,体现负载均衡效果,将请求平均分配到 8080 和 8081 端口中。 2、配置前准备: (1)准备两个 tomcat 服务器,一台 8080 端口,一台 8081 端口,可参考反向代理实例2。 (2)在两台 tomcat 服务器的 webapps 目录中,创建名称为 edu 的文件夹,在 edu 文件夹中创建页面 a.html 用于测试。(可以类比反向代理实例2) 8081端口的 edu 目录

3、配置 nginx 实现负载均衡 在 http 块中编辑 server 块并添加 upstream 部分,具体代码如下:

upstream myserver{ server 192.168.134.105:8080; server 192.168.134.105:8081; } server { listen 80; server_name 192.168.134.105; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; proxy_pass http://myserver; } }

配置 nginx 实现负载均衡 配置好后,按 ESC 退出编辑模式,输入 :wq 保存退出。

4、重启 nginx 服务,测试负载均衡效果。

cd /usr/local/nginx/sbin/ ./nginx -s reload

地址栏输入: http://192.168.134.105/edu/a.html nginx 负载均衡效果

刷新页面 nginx 负载均衡效果 多次刷新页面可发现,两个页面交替出现,说明请求平均分配给 8080 端口的 tomcat 服务器和 8081 端口的 tomcat 服务器,负载均衡配置成功。

补充:nginx 分配服务器策略 1、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果服务器 down 掉,就会自动剔除该服务器。(这个是 nginx 默认的服务器分配策略,不用做额外的配置)

2、weight 权重

weight 代表权重,默认值是 1,权重越高被分配的客户端请求越多。 作用:指定轮询的几率,weight 和访问比率成正比,用于服务端性能不均的情况。 具体配置如下示例:

upstream myserver{ server 192.168.134.105:8080 weight=8; server 192.168.134.105:8081 weight=10; } 3、ip_hash

每个请求按访问 ip 的 hash 结果分配,这样每个客户端访问固定的一个后端服务器。 通俗的来说,就是每个请求第一次访问哪个服务器,后面同样 ip 地址的请求还是访问同一个服务器。比如说 http://192.168.134.105/edu/a.html 请求访问的服务器是 8080 端口的 tomcat 服务器,那么 ip 地址同样为 http://192.168.134.105 的其他请求还是访问 8080端口的 tomcat 服务器。

同时,该策略可以解决 Session 共享问题。

具体配置如下:

upstream myserver{ ip_hash; server 192.168.134.105:8080; server 192.168.134.105:8081; } 4、fair(第三方)

按服务器的响应时间来分配请求,响应时间短的优先分配。 具体配置如下:

upstream myserver{ server 192.168.134.105:8080; server 192.168.134.105:8081; fair; } 四、配置实例-动静分离

1、什么是动静分离(详解) Nginx 动静分离简单来说就是把动态跟静态请求分开, 不能理解成只是单纯的把动态页面和 静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开, 可以理解成使用 Nginx 处理静态页面,Tomcat 处理动态页面。

动静分离从目前实现角度来讲大致分为两种: 一种是纯粹把静态文件独立成单独的域名, 放在独立的服务器上, 也是目前主流推崇的方案; 另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。

通过 location 指定不同的后缀名实现不同的请求转发。

通过 expires 参数设置, 可以使 浏览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资 源设定一个过期时间, 也就是说无需去服务端验证, 直接通过浏览器自身确认是否过期即可, 所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件, 不建议使用 Expires 来缓存), 我这里设置 3d, 表示在这 3 天之内访问这个 URL, 发送 一个请求, 比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304, 如果有修改, 则直接从服务器重新下载, 返回状态码 200。

2、配置前的准备:准备好静态资源 在根目录下新建一个 source 文件夹,并在 source 文件夹下创建 image 文件夹(用来存放图片)和 www 文件夹(用来存放 html 页面)。 动静分离测试准备资源 3、nginx 配置文件配置动静分离

server { listen 80; server_name 192.168.134.105; #charset koi8-r; #access_log logs/host.access.log main; location /www/ { root /source/; index index.html index.htm; } location /image/ { root /source/; autoindex on; } }

配置动静分离 4、切换到 /usr/local/nginx/sbin/ 目录,重启 nginx 服务,测试动静分离是否配置成功。

cd /usr/local/nginx/sbin/ ./nginx -s reload

在浏览器输入地址 http://192.168.134.105/image/ 可以看到目录下文件的展示。 测试动静分离 点击图片连接,可见图片的具体内容。

在浏览器地址栏中输入 http://192.168.134.105/www/a.html,见以下内容则说明配置成功。 测试 html 页面

五、配置 Nginx 高可用

1、什么是高可用 通俗的来说,就是保证当一个 Nginx 服务器宕机时,有另外一个 Nginx 服务器代替它,来保证能完成相关的功能。

2、需要实现的效果: Nginx 高可用集群示例

如上图:要实现 Nginx 高可用需要配置一个主机和一个或多个从机(备用机),各自有各自的 ip 地址,Nginx 服务集群以相同的 ip 地址对外暴露。当主机 nginx 1宕机时,从机 nginx 2 可以代替主机,实现反向代理、负载均衡等效果。

3、配置高可用的准备工作: (1)需要两台服务器(linux 虚拟机,我的是 192.168.134.105 和 192.168.134.128) (2)在两个虚拟机上安装 nginx,可参考 如何在Linux虚拟机中安装 Nginx (3)在两个虚拟机上安装 keepalived 软件,执行 如下yum 命令即可:

yum install keepalived -y

4 、具体配置高可用(主从配置)

(1)配置 keepalived 安装完之后,在 /etc/ 目录下会生成目录 keepalived,有文件 keepalived.conf,编辑此文件。 下面以主机 nginx 为例来配置(备机可参考修改):global_defs { notification_email { [email protected] [email protected] [email protected] } notification_email_from [email protected] smtp_server 192.168.134.105 # nginx 服务器的 ip 地址 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_http_port { script "/usr/local/src/nginx_check.sh" interval 2 #(检测脚本执行的间隔) weight 2 } vrrp_instance VI_1 { state MASTER # 备份服务器上将 MASTER 改为 BACKUP interface eth0 # 网卡 virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同 priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小 advert_int 1 authentication { auth_type PASS auth_pass 8888 } virtual_ipaddress { 192.168.134.10 # VRRP H 虚拟地址 } } 配置 keepalived

keepalived 配置文件目录

(2)在 /usr/local/src/ 目录下,创建脚本文件 nginx_check.sh,并添加以下内容(以主机为例,备机同理):#!/bin/bash # 如果进程中没有nginx则将keepalived进程kill掉 A=`ps -C nginx--no-header |wc -l` ## 查看是否有 nginx进程 把值赋给变量A if [ $A -eq 0];then ## 如果没有进程值得为零 /usr/local/nginx/sbin/nginx sleep 2 if [ $A -eq 0 ];then service keepalived stop ## 则结束 keepalived 进程 fi fi 配置主机的 nginx 检测脚本(3)启动两台服务器的 nginx 和 keepalived# 切换到 nginx 的 sbin 目录 cd /usr/local/nginx/sbin/ # 启动 nginx ./nginx # 如果已经启动,则使用以下命令重启 ./nginx -s reload # CentOS 6.5 启动服务的命令 service keepalived start # CentOS 7 启动 keepalived 服务命令 systemctl start keepalived.service 启动 nginx 和 keepalived

5、测试 nginx 高可用 (1)在浏览器输入前面所配置的 虚拟 ip 地址 http://192.168.134.10测试是否可以访问,如果可以访问说明主服务器是可以通过虚拟 ip 进行访问的。 通过虚拟ip地址访问nginx

(2)手动将 nginx 主服务器停掉模拟主服务器宕机,再次刷新页面,测试 nginx 集群的高可用(即所有请求是否会转发到备份服务器中)。

# 切换到 nginx 的 sbin 目录 /usr/local/nginx/sbin # 关闭 nginx 服务 ./nginx -s stop

关闭主服务器的nginx应用

测试 nginx 集群高可用 刷新页面还是可以访问到 nginx 欢迎页,说明说明 nginx 集群高可用到此配置成功!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有